
#import "Frame.h"
#import "Action.h"
#import <vector.h>
#import <stdio.h>



class Role {
	//Map myMap;
	byte m_ID;
	byte m_ArrID;
	byte m_Type;

	byte m_speed;//≤æ∞ ≥t´◊
	byte _speed;//≤æ∞ ≥t´◊
	int m_baseChangeTime;
	int m_changeTime;
	int m_iX;
	int m_iY;
	int m_ActID;//∞ ß@ID
	byte   m_ACTOff;
	byte m_iActionNum;//∞ ß@º∆∂q
	vector<Action*> m_RoleAction;

	byte m_TriggerNum;
//	String* m_strTrigger;
	byte playType;

	//byte** aiAct;
	vector<vector<int> > aiAct;
	
	int _tempIndex;
	bool bAttackAim;//¨Oß_©R§§•ÿº–
	bool bAttackBack;//ß¿ª®œ§H´·∞h
	bool bDong;
	
	int m_dir;
	
	CCTexture* m_imgRole;
	vector<char*>m_imgNameVec;
	char _img_name[128];
public:	
	Role(const char* ani_file);
	~Role();
	Role(const Role& roles, int m, int n);
	
	inline vector<Action*>& GetActionVec()
	{
		return m_RoleAction;
	}
	
	
 inline	vector<char*>& getImageName()
	{
		return m_imgNameVec;
	}
	
	int getActionNum(){
		return  m_RoleAction.size() ;
	}
	
	void setRoleType(int type){
		m_Type=(byte)type;
	}
	int getRoleType(){
		return m_Type;
	}



	bool  attack( ){
		return true;
	}

	byte getTriggerNum( ){
		return  m_TriggerNum;
	}

inline	void resetAction(){
		m_RoleAction[m_ActID]->resetAction();
	}
	


inline	void setActionState(int _actID,int type,int off){
		if(_actID>=0){
			if(m_ActID!=_actID){
				resetAction();
			}
			m_ActID=_actID;
		}
		if(type>=0){
			playType = (byte) type;
		}
		if(off>=0){
			m_ACTOff=(byte)off;
		}
	}	
	
  
	int getDir(){
		return m_dir;
	}

	
	void setDir(int dir){
		m_dir=dir;
		if(dir==3){
			m_dir=2;
			m_ActID=2;
			m_ACTOff=1;
		}else{
			m_ActID=dir;
			m_ACTOff=0;
		}
	}
 

	void loadRole(FILE* fp);
	
    int  getX(){
      return  m_iX;
    }
	
	int  getY(){
          return  m_iY ;
	}

    
	void setX(int x){
      m_iX=x;
    }
     void setY(int y){
      m_iY=y;
    }
    
	int  getActionID(){
       return m_ActID;
    }

    
	void setSpeed(int i){
    m_speed=_speed= (byte)i;
    }

    
	void setID(int i){
      m_ID=(byte)i;
    }


    
//	int  getM_ibHiitX() {
//return m_RoleAction[m_ActID]->getM_ibHiitX();
//}
//
//	int  getM_ibHitH() {
//return m_RoleAction[m_ActID]->getM_ibHitH();
//}
//
//	int  getM_ibHitW() {
//return m_RoleAction[m_ActID]->getM_ibHitW();
//}
//	int  getM_ibHitY() {
//return m_RoleAction[m_ActID]->getM_ibHitY();
//}
//
//	int  getM_iHiitX() {
//   return m_RoleAction[m_ActID]->getM_iHiitX();
//   }
//int getM_iHitH() {
//   return m_RoleAction[m_ActID]->getM_iHitH();
//   }
//
//int  getM_iHitW() {
//   return m_RoleAction[m_ActID]->getM_iHitW();
//   }
//int  getM_iHitY() {
//   return m_RoleAction[m_ActID]->getM_iHitY();
//   }
//
//
//int  getM_iColRectW() {
//      return  m_RoleAction[m_ActID]->getM_iColRectW();
//    }
//	int  getM_iColRectH() {
//      return m_RoleAction[m_ActID]->getM_iColRectH();
//    }
//	int  getM_iColRectX() {
//      return m_RoleAction[m_ActID]->getM_iColRectX();
//    }
//	int  getM_iColRectY() {
//      return m_RoleAction[m_ActID]->getM_iColRectY();
//    }
//byte getM_ACTOff() {
//    return m_ACTOff;
//  }
//
//
//int getFrameID( ) {
//	  return   m_RoleAction[m_ActID]->getFrameIndex();
//  }
	
	bool update(int action_id, int& frameIndex, double _time){
		return m_RoleAction[action_id]->update(_time, frameIndex);
	}
	
//	bool isAniFinish(){
//		return m_RoleAction[m_ActID]->isActionFinish();
//	};

};
